1
一分錢的謎團與浮點數的現實
AI017Lesson 3
00:00

計算物理學中的根本性摩擦源於電腦以 二進位浮點數運算來表示實數。與人類使用十進位(小數)思考不同,硬體以二進位(二進位)儲存數值。這導致了一種 漏氣的抽象:像 0.1 這樣的簡單小數分數無法被精確表示。

1. 浮點數的現實

Go 提供了兩種主要的實數類型: float32float64。當使用如 price := 0.0的簡短變數宣告語法時,Go 預設使用 float64。這些類型是現實的近似值,而非精確的數學值。

0.1 + 0.1 = ?Gopher:「為什麼不是 0.2?」0.0001100110011...

2. 0.1 的謎團

在十進位中,$1/3$ 會產生無限循環小數($0.333...$)。在二進位中,數值 $0.1$ 會產生一個 無限循環分數。由於電腦記憶體是有限的,這個分數會被截斷,導致累積誤差。例如,$0.1 + 0.2$ 的結果是 $0.30000000000000004$,而不是精確的 $0.3$。

警告: 千萬不要使用 == 在邏輯閘中比較浮點數,因為這些微小的差異會導致比較失敗。

main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>